

public class ArrayStack implements Stack {
    private Object[] items;
    private int size;

    public ArrayStack() {
	clear();
    }
    public void clear() {
	items = new Object[1];
	size = 0;
    }
    public boolean isEmpty() {
	return size == 0;
    }
    private void grow() {
	Object[] copy = new Object[items.length * 2];
	for (int i = 0; i < size; i++)
	    copy[i] = items[i];
	items = copy;
    }
    public void push(Object x) {
	if (size >= items.length)
	    grow();
	items[size] = x;
	size++;
    }
    public Object pop() {
	if (isEmpty())
	    throw new java.util.EmptyStackException();
	size--;
	Object x = items[size];
	items[size] = null;
	return x;
    }
    public Object top() {
	if (isEmpty())
	    throw new java.util.EmptyStackException();
	return items[size-1];
    }
}

